package org.jeecg.modules.cw.service.impl;

import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.cw.entity.CwTxrygzjbxmxbTj;
import org.jeecg.modules.cw.entity.CwTxrygzjbxmxb;
import org.jeecg.modules.cw.mapper.CwTxrygzjbxmxbMapper;
import org.jeecg.modules.cw.mapper.CwTxrygzjbxmxbTjMapper;
import org.jeecg.modules.cw.service.ICwTxrygzjbxmxbTjService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Collection;

/**
 * @Description: 退休人员工资及保险明细提交表
 * @Author: jeecg-boot
 * @Date:   2025-09-04
 * @Version: V1.0
 */
@Service
public class CwTxrygzjbxmxbTjServiceImpl extends ServiceImpl<CwTxrygzjbxmxbTjMapper, CwTxrygzjbxmxbTj> implements ICwTxrygzjbxmxbTjService {

	@Autowired
	private CwTxrygzjbxmxbTjMapper cwTxrygzjbxmxbTjMapper;
	@Autowired
	private CwTxrygzjbxmxbMapper cwTxrygzjbxmxbMapper;
	@Autowired
	private ISysDepartService sysDepartService;
	@Autowired
	private ISysBaseAPI iSysBaseAPI;
	@Override
	@Transactional(rollbackFor = Exception.class)
	public void saveMain(CwTxrygzjbxmxbTj cwTxrygzjbxmxbTj, List<CwTxrygzjbxmxb> cwTxrygzjbxmxbList) {
		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
		String departIdsByOrgCode = iSysBaseAPI.getDepartIdsByOrgCode(user.getOrgCode());
		SysDepart byId = sysDepartService.getById(departIdsByOrgCode);
		String departName = byId.getDepartName();
		cwTxrygzjbxmxbTj.setUnit(departName);

		cwTxrygzjbxmxbTjMapper.insert(cwTxrygzjbxmxbTj);
		if(cwTxrygzjbxmxbList!=null && cwTxrygzjbxmxbList.size()>0) {
			for(CwTxrygzjbxmxb entity:cwTxrygzjbxmxbList) {
				//外键设置
				entity.setUnit(cwTxrygzjbxmxbTj.getUnit());
				entity.setYear(cwTxrygzjbxmxbTj.getYear());
				entity.setUserId(user.getId());
				entity.setMainId(cwTxrygzjbxmxbTj.getId());
// 基本离退休费
				if (entity.getRetirementPay() == null) {
					entity.setRetirementPay(0.0);
				}
// 2006年前增加生活费
				if (entity.getShf() == null) {
					entity.setShf(0.0);
				}
// 2006年后增加生活费
				if (entity.getZjshf() == null) {
					entity.setZjshf(0.0);
				}
// 2021年增加养老金
				if (entity.getZjylj() == null) {
					entity.setZjylj(0.0);
				}
// 2022年增加养老金
				if (entity.getZj() == null) {
					entity.setZj(0.0);
				}
// 2023年增加养老金
				if (entity.getZjb() == null) {
					entity.setZjb(0.0);
				}
// 2024年增加养老金
				if (entity.getZengjia() == null) {
					entity.setZengjia(0.0);
				}
// 2025年增加养老
				if (entity.getZengjiabaoxu() == null) {
					entity.setZengjiabaoxu(0.0);
				}
// 独生子女加发5%
				if (entity.getDszv() == null) {
					entity.setDszv(0.0);
				}
// 退休生活补贴
				if (entity.getTxshf() == null) {
					entity.setTxshf(0.0);
				}
// 加发5% 补贴
				if (entity.getBt() == null) {
					entity.setBt(0.0);
				}
// 教龄满30年加发
				if (entity.getJf() == null) {
					entity.setJf(0.0);
				}
// 特殊岗位津贴
				if (entity.getAllowance() == null) {
					entity.setAllowance(0.0);
				}
// 艰苦津贴
				if (entity.getHardshipAllowance() == null) {
					entity.setHardshipAllowance(0.0);
				}
// 卫生费
				if (entity.getWsf() == null) {
					entity.setWsf(0.0);
				}
// 劳模荣誉津贴
				if (entity.getLmryjt() == null) {
					entity.setLmryjt(0.0);
				}
// 特供加发
				if (entity.getTgjf() == null) {
					entity.setTgjf(0.0);
				}
// 预计涨工资
				if (entity.getYzgz() == null) {
					entity.setYzgz(0.0);
				}
// 在职月数
				if (entity.getZzys() == null) {
					entity.setZzys(0.0);
				}
// 医疗保险（大额）
				if (entity.getYlbxde() == null) {
					entity.setYlbxde(0.0);
				}
// 取暖费
				if (entity.getHeatingFee() == null) {
					entity.setHeatingFee(0.0);
				}
				if ("财政".equals(entity.getCzFcz())) {
					//住房提租补贴Double butie = new BigDecimal(
					Double butie = new BigDecimal((entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz())*0.13).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

					Double hj=(entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz()+ entity.getHardshipAllowance()+ entity.getLmryjt()+butie);
					entity.setZftzbt(butie);
					entity.setNyfhj(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjsn(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setCgyb(new BigDecimal((hj*entity.getZzys())*0.05).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYjsbffzg(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjs(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbx(new BigDecimal(((hj-butie-entity.getYzgz())*entity.getZzys())*0.72).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
				}else {
					//住房提租补贴Double butie = new BigDecimal(
					Double butie = new BigDecimal((entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz())*0.13).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

					Double hj=(entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz()+ entity.getHardshipAllowance()+ entity.getLmryjt()+butie);
					entity.setZftzbt(butie);
					entity.setYyfhj(new BigDecimal(hj).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setNyfhj(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjsn(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setCgyb(new BigDecimal((hj*entity.getZzys())*0.05).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYjsbffzg(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjs(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbx(new BigDecimal(((hj-butie-entity.getYzgz())*entity.getZzys())*0.72).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
				}
				cwTxrygzjbxmxbMapper.insert(entity);
			}
		}
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void updateMain(CwTxrygzjbxmxbTj cwTxrygzjbxmxbTj,List<CwTxrygzjbxmxb> cwTxrygzjbxmxbList) {
		cwTxrygzjbxmxbTjMapper.updateById(cwTxrygzjbxmxbTj);
		
		//1.先删除子表数据
		cwTxrygzjbxmxbMapper.deleteByMainId(cwTxrygzjbxmxbTj.getId());
		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
		//2.子表数据重新插入
		if(cwTxrygzjbxmxbList!=null && cwTxrygzjbxmxbList.size()>0) {
			for(CwTxrygzjbxmxb entity:cwTxrygzjbxmxbList) {
				//外键设置
				// 基本离退休费
				if (entity.getRetirementPay() == null) {
					entity.setRetirementPay(0.0);
				}
// 2006年前增加生活费
				if (entity.getShf() == null) {
					entity.setShf(0.0);
				}
// 2006年后增加生活费
				if (entity.getZjshf() == null) {
					entity.setZjshf(0.0);
				}
// 2021年增加养老金
				if (entity.getZjylj() == null) {
					entity.setZjylj(0.0);
				}
// 2022年增加养老金
				if (entity.getZj() == null) {
					entity.setZj(0.0);
				}
// 2023年增加养老金
				if (entity.getZjb() == null) {
					entity.setZjb(0.0);
				}
// 2024年增加养老金
				if (entity.getZengjia() == null) {
					entity.setZengjia(0.0);
				}
// 2025年增加养老
				if (entity.getZengjiabaoxu() == null) {
					entity.setZengjiabaoxu(0.0);
				}
// 独生子女加发5%
				if (entity.getDszv() == null) {
					entity.setDszv(0.0);
				}
// 退休生活补贴
				if (entity.getTxshf() == null) {
					entity.setTxshf(0.0);
				}
// 加发5% 补贴
				if (entity.getBt() == null) {
					entity.setBt(0.0);
				}
// 教龄满30年加发
				if (entity.getJf() == null) {
					entity.setJf(0.0);
				}
// 特殊岗位津贴
				if (entity.getAllowance() == null) {
					entity.setAllowance(0.0);
				}
// 艰苦津贴
				if (entity.getHardshipAllowance() == null) {
					entity.setHardshipAllowance(0.0);
				}
// 卫生费
				if (entity.getWsf() == null) {
					entity.setWsf(0.0);
				}
// 劳模荣誉津贴
				if (entity.getLmryjt() == null) {
					entity.setLmryjt(0.0);
				}
// 特供加发
				if (entity.getTgjf() == null) {
					entity.setTgjf(0.0);
				}
// 预计涨工资
				if (entity.getYzgz() == null) {
					entity.setYzgz(0.0);
				}
// 在职月数
				if (entity.getZzys() == null) {
					entity.setZzys(0.0);
				}
// 医疗保险（大额）
				if (entity.getYlbxde() == null) {
					entity.setYlbxde(0.0);
				}
// 取暖费
				if (entity.getHeatingFee() == null) {
					entity.setHeatingFee(0.0);
				}
				if ("财政".equals(entity.getCzFcz())) {
					//住房提租补贴Double butie = new BigDecimal(
					Double butie = new BigDecimal((entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz())*0.13).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

					Double hj=(entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz()+ entity.getHardshipAllowance()+ entity.getLmryjt()+butie);
					entity.setZftzbt(butie);
					entity.setNyfhj(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjsn(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setCgyb(new BigDecimal((hj*entity.getZzys())*0.05).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYjsbffzg(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjs(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbx(new BigDecimal(((hj-butie-entity.getYzgz())*entity.getZzys())*0.72).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
				}else {
					//住房提租补贴Double butie = new BigDecimal(
					Double butie = new BigDecimal((entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz())*0.13).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

					Double hj=(entity.getRetirementPay()+entity.getShf()+entity.getZjshf()+entity.getZjylj()+
							entity.getZj()+entity.getZjb()+entity.getZengjia()+ entity.getZengjiabaoxu()+
							entity.getDszv()+ entity.getTxshf()+ entity.getBt()+ entity.getJf()+ entity.getAllowance()+
							entity.getWsf()+ entity.getTgjf()+ entity.getYzgz()+ entity.getHardshipAllowance()+ entity.getLmryjt()+butie);

					entity.setZftzbt(butie);
					entity.setYyfhj(new BigDecimal(hj).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setNyfhj(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjsn(new BigDecimal(hj*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setCgyb(new BigDecimal((hj*entity.getZzys())*0.05).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYjsbffzg(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbxjs(new BigDecimal((hj-butie-entity.getYzgz())*entity.getZzys()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
					entity.setYlbx(new BigDecimal(((hj-butie-entity.getYzgz())*entity.getZzys())*0.72).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
				}
				entity.setUnit(cwTxrygzjbxmxbTj.getUnit());
				entity.setYear(cwTxrygzjbxmxbTj.getYear());
				entity.setUserId(user.getId());
				entity.setMainId(cwTxrygzjbxmxbTj.getId());
				cwTxrygzjbxmxbMapper.insert(entity);
			}
		}
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void delMain(String id) {
		cwTxrygzjbxmxbMapper.deleteByMainId(id);
		cwTxrygzjbxmxbTjMapper.deleteById(id);
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void delBatchMain(Collection<? extends Serializable> idList) {
		for(Serializable id:idList) {
			cwTxrygzjbxmxbMapper.deleteByMainId(id.toString());
			cwTxrygzjbxmxbTjMapper.deleteById(id);
		}
	}
	
}
